public class test1 {
    class Solution {
        public int maxProfit(int[] prices) {
            //持有股票 0：维持状态
            //           今天刚买的：前一天是冷冻期/前一天不是冷冻期，就是卖出股票状态
            //不持有股票 1：维持状态(前两天卖出股票，前一天是冷冻期/前2+n天卖出股票，前一天不是冷冻期)
            //          2：今天卖出股票
            //          3：冷冻期（前一天卖出股票）
            int[][] dp = new int[prices.length][4];
            dp[0][0] = -prices[0];
            for(int i = 1;i<prices.length;i++){
                dp[i][0] = Math.max(Math.max(dp[i-1][0],dp[i-1][3]-prices[i]),dp[i-1][1]-prices[i]);
                dp[i][1] = Math.max(dp[i-1][1],dp[i-1][3]);
                dp[i][2] = dp[i-1][0]+prices[i];
                dp[i][3] = dp[i-1][2];
            }

            return Math.max(Math.max(dp[prices.length-1][1],dp[prices.length-1][2]),dp[prices.length-1][3]);
        }
    }
}
